\documentclass[C:/Users/12748/Desktop/latex模板/main/main.tex]{subfiles}

\begin{document}

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
  \(a1<b1\) 且 \(a2<b2\) 时，按 \(a1<a2\) 排序
\item
  \(a1=b1\) 且 \(a2=b2\) 时，如何排序对结果没有影响
\item
  \(a1>b1\) 且 \(a2>b2\) 时，按 \(b2<b1\) 排序
\end{enumerate}

\begin{itemize}
\item
  开两个 \(vector\)，一个存 \(a<b\) \((vec1)\)，另一个存 \(a>b\)
  \((vec2)\)，先处理 \(vec1\) 在处理 \(vec2\)
\end{itemize}

\begin{lstlisting}
const int N = 3e5 + 10;
struct Edge{
	int nex , to;
}edge[N << 1];
int head[N] , TOT;
void add_edge(int u , int v)
{
	edge[++ TOT].nex = head[u] ;
	edge[TOT].to = v;
	head[u] = TOT;
}
struct node{
	int a , b , id;
}p[N] , q[N];
vector<node>vec1 , vec2;
bool cmp1(node x , node y)
{
	return x.a < y.a;
}
bool cmp2(node x , node y)
{
	return x.b > y.b;
}
signed main()
{
	int n , m;
	cin >> n;
	rep(i , 1 , n) cin >> p[i].a;
	rep(i , 1 , n) cin >> p[i].b , p[i].id = i;
	rep(i , 1 , n)
	{
		if(p[i].a <= p[i].b) vec1.pb(p[i]);
		else vec2.pb(p[i]);
	}
	sort(all(vec1) , cmp1) , sort(all(vec2) , cmp2);
	int cnt = 0;
	for(auto j : vec1) q[++ cnt] = j;
	for(auto j : vec2) q[++ cnt] = j; 
	int ta = q[1].a , tb = q[1].a + q[1].b;
	rep(i , 2 , n)
	{
		ta += q[i].a;
		tb = max(ta , tb) + q[i].b;
	}
	cout << tb << '\n';
	rep(i , 1 , n) cout << q[i].id << " ";
	cout << '\n';
	return 0;
}
\end{lstlisting}

\end{document}
